#include <iostream>
using namespace std;

//int main()
//{
//	int a = 7;
//	int* pa = &a;
//	int address = reinterpret_cast<int>(pa);
//
//	cout << a << " " << pa << " " << address << endl;
//
//	return 0;
//}

//int main()
//{
//	double a = 7.14;
//	int b = static_cast<int>(a);
//
//	cout << a << " " << b << endl;
//
//	return 0;
//}

//int main()
//{
//	//const int a = 2;
//	//int* p = const_cast<int*>(&a);
//	//*p = 3;
//	//cout << a << " " << *p << endl; // 2 3
//	
//	//volatile const int a = 2;
//	//int* p = const_cast<int*>(&a);
//	//*p = 3;
//	//cout << a << " " << *p << endl; // 3 3
//
//	const int a = 2;
//	//int* p = const_cast<int*>(&a);
//	int* p = (int*)&a;
//	*p = 3;
//	cout << a << " " << *p << endl;
//
//	return 0;
//}

//class A // 父类
//{
//public:
//	virtual void f() // 父类必须含有虚函数
//	{}
//
//	int _a = 1;
//};
//
//class B : public A // 子类
//{
//public:
//	int _b = 2;
//};

//void Func(A* pa)
//{
//	B* bptr = dynamic_cast<B*>(pa);
//	cout << bptr << endl;
//
//	bptr->_a = 6;
//	bptr->_b = 7;
//}

//int main()
//{
//	A aa;
//	B bb;
//	Func(&aa);
//
//	return 0;
//}

class A1
{
public:
	//virtual void f(){}
public:
	int _a1 = 0;
};

class A2
{
public:
	//virtual void f(){}
public:
	int _a2 = 0;
};

class B : public A1, public A2
{
public:
	int _b = 1;
};

int main()
{
	B bb;
	A1* ptr1 = &bb;
	A2* ptr2 = &bb;
	cout << ptr1 << endl;
	cout << ptr2 << endl << endl;

	B* pb1 = (B*)ptr1;
	B* pb2 = (B*)ptr2;
	cout << pb1 << endl;
	cout << pb2 << endl << endl;

	//B* pb3 = dynamic_cast<B*>(ptr1);
	//B* pb4 = dynamic_cast<B*>(ptr2);
	//cout << pb3 << endl;
	//cout << pb4 << endl << endl;

	return 0;
}